package com.css.fxfzypg.manage.sampling.verify;

import cn.afterturn.easypoi.excel.entity.result.ExcelVerifyHandlerResult;
import cn.afterturn.easypoi.handler.inter.IExcelVerifyHandler;
import com.css.fxfzypg.manage.sampling.repository.entity.SamplingEntity;
import com.css.fxfzypg.modules.surveytaskmanage.service.FieldSurveyTaskService;
import com.css.fxfzypg.util.PlatformObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Component
public class SamplingExcelVerifyHandler implements IExcelVerifyHandler<SamplingEntity> {

    @Autowired
    FieldSurveyTaskService fieldSurveyTaskService;

    @Override
    public ExcelVerifyHandlerResult verifyHandler(SamplingEntity samplingEntity) {

        ExcelVerifyHandlerResult result = new ExcelVerifyHandlerResult(true);
        StringBuilder message = new StringBuilder("");
        if (PlatformObjectUtils.isEmpty(samplingEntity.getTaskCode())) {
            result.setSuccess(false);
            message.append("任务编号 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getFieldSurveyName())) {
            result.setSuccess(false);
            message.append("实地调查点名称 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getLongitude())) {
            result.setSuccess(false);
            message.append("经度 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getLatitude())) {
            result.setSuccess(false);
            message.append("纬度 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getProvince())) {
            result.setSuccess(false);
            message.append("建筑地点-省 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getCity())) {
            result.setSuccess(false);
            message.append("建筑地点-市 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getArea())) {
            result.setSuccess(false);
            message.append("建筑地点-区/县 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getTownship())) {
            result.setSuccess(false);
            message.append("建筑地点-所属乡镇 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getTotalHouseholdNum())) {
            result.setSuccess(false);
            message.append("总户数 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getTotalPopulation())) {
            result.setSuccess(false);
            message.append("总人口 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getActualResidentPopulation())) {
            result.setSuccess(false);
            message.append("实际常驻人口 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getMigrantWorkers())) {
            result.setSuccess(false);
            message.append("外出务工人口 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getChildrenProportion())) {
            result.setSuccess(false);
            message.append("人口比例%（少年儿童） 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getYoungProportion())) {
            result.setSuccess(false);
            message.append("人口比例%（中青年） 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getOldAgeProportion())) {
            result.setSuccess(false);
            message.append("人口比例%（老年） 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getTrafficConditions())) {
            result.setSuccess(false);
            message.append("交通通达情况 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getHouseNum())) {
            result.setSuccess(false);
            message.append("房屋数量 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getRoomAverageNum())) {
            result.setSuccess(false);
            message.append("房屋平均间数 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getMainBuildingMaterials())) {
            result.setSuccess(false);
            message.append("主要建筑材料 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getHighStructure())) {
            result.setSuccess(false);
            message.append("房屋类型比例%(高层建筑) 不能为空！");
        }

        if (PlatformObjectUtils.isEmpty(samplingEntity.getSteelStructure())) {
            result.setSuccess(false);
            message.append("房屋类型比例%(钢结构) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getConcreteStructure())) {
            result.setSuccess(false);
            message.append("房屋类型比例%(多层钢筋混凝土结构) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getMasonryStructure())) {
            result.setSuccess(false);
            message.append("房屋类型比例%(砖混结构) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getBrickWoodStructure())) {
            result.setSuccess(false);
            message.append("房屋类型比例%(砖木结构) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getSoilStructure())) {
            result.setSuccess(false);
            message.append("房屋类型比例%(土结构房屋) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getWoodStructure())) {
            result.setSuccess(false);
            message.append("房屋类型比例%(木结构房屋) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getStoneStructure())) {
            result.setSuccess(false);
            message.append("房屋类型比例%(石结构房屋) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getOtherStructure())) {
            result.setSuccess(false);
            message.append("房屋类型比例%(其他结构房屋) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getBuild70sBefore())) {
            result.setSuccess(false);
            message.append("房屋建造年代比例%(1970年以前) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getBuild70s())) {
            result.setSuccess(false);
            message.append("房屋建造年代比例%(1971年-1980年) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getBuild80s())) {
            result.setSuccess(false);
            message.append("房屋建造年代比例%(1981年-1990年) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getBuild90s())) {
            result.setSuccess(false);
            message.append("房屋建造年代比例%(1991年-2000年) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getBuild00s())) {
            result.setSuccess(false);
            message.append("房屋建造年代比例%(2001年-2010年) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getBuild10s())) {
            result.setSuccess(false);
            message.append("房屋建造年代比例%(2011年-2015年) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getBuild10s())) {
            result.setSuccess(false);
            message.append("房屋建造年代比例%(2016年-2020年) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getBuild20s())) {
            result.setSuccess(false);
            message.append("房屋建造年代比例%(2021年及以后) 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getIsSchool())) {
            result.setSuccess(false);
            message.append("周边是否有学校 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getIsHospital())) {
            result.setSuccess(false);
            message.append("周边是否有医院 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getIsDisaster())) {
            result.setSuccess(false);
            message.append("周边是否有地质灾害 不能为空！");
        }
        if (PlatformObjectUtils.isEmpty(samplingEntity.getIsReservoir())) {
            result.setSuccess(false);
            message.append("周边是否有水库 不能为空！");
        }

        //校验任务编号是否存在
        List<String> allTaskNum = new ArrayList<>();
        List<Map<String, Object>> taskNum = fieldSurveyTaskService.getAllTaskNum();
        if (!PlatformObjectUtils.isEmpty(taskNum)) {
            for (Map<String, Object> map : taskNum) {
                String taskCode = map.get("task_num").toString();
                allTaskNum.add(taskCode);
            }
            if(!allTaskNum.contains(samplingEntity.getTaskCode())){
                result.setSuccess(false);
                message.append("任务编号不存在,请重新填写！");
            }
        }else{
            result.setSuccess(false);
            message.append("任务编号不存在,请重新填写！");
        }

        //校验 人口比例 之和是否为100
        if(PlatformObjectUtils.isNotEmpty(samplingEntity.getChildrenProportion()) && PlatformObjectUtils.isNotEmpty(samplingEntity.getYoungProportion()) && PlatformObjectUtils.isNotEmpty(samplingEntity.getOldAgeProportion())){
            BigDecimal d1 = new BigDecimal(samplingEntity.getChildrenProportion());
            BigDecimal d2 = new BigDecimal(samplingEntity.getYoungProportion());
            BigDecimal d3 = new BigDecimal(samplingEntity.getOldAgeProportion());
            BigDecimal v = d1.add(d2.add(d3));
            BigDecimal v1 = new BigDecimal(100.0);
            int i = v.compareTo(v1);
            if(i!=0){
                result.setSuccess(false);
                message.append("请确保人口比例之和为100！");
            }
        }

        //校验  房屋建造年代比例 之和是否为100
        if(PlatformObjectUtils.isNotEmpty(samplingEntity.getBuild70sBefore()) && PlatformObjectUtils.isNotEmpty(samplingEntity.getBuild70s())
                && PlatformObjectUtils.isNotEmpty(samplingEntity.getBuild80s()) && PlatformObjectUtils.isNotEmpty(samplingEntity.getBuild90s())
                && PlatformObjectUtils.isNotEmpty(samplingEntity.getBuild00s()) && PlatformObjectUtils.isNotEmpty(samplingEntity.getBuild10s())
                && PlatformObjectUtils.isNotEmpty(samplingEntity.getBuild20s())){
            BigDecimal d1=new BigDecimal(samplingEntity.getBuild70sBefore());
            BigDecimal d2=new BigDecimal(samplingEntity.getBuild70s());
            BigDecimal d3=new BigDecimal(samplingEntity.getBuild80s());
            BigDecimal d4=new BigDecimal(samplingEntity.getBuild90s());
            BigDecimal d5=new BigDecimal(samplingEntity.getBuild00s());
            BigDecimal d6=new BigDecimal(samplingEntity.getBuild10s());
            BigDecimal d16=new BigDecimal(samplingEntity.getBuild16s());
            BigDecimal d7=new BigDecimal(samplingEntity.getBuild20s());
            BigDecimal v = d1.add(d2.add(d3.add(d4.add(d5.add(d6.add(d16.add(d7)))))));
            BigDecimal v1 = new BigDecimal(100.0);
            int i = v.compareTo(v1);
            if(i!=0){
                result.setSuccess(false);
                message.append("请确保房屋建造年代比例之和为100！");
            }
        }

        //校验 房屋类型比例 之和是否为100
        if(PlatformObjectUtils.isNotEmpty(samplingEntity.getHighStructure()) && PlatformObjectUtils.isNotEmpty(samplingEntity.getSteelStructure())
                && PlatformObjectUtils.isNotEmpty(samplingEntity.getConcreteStructure()) && PlatformObjectUtils.isNotEmpty(samplingEntity.getMasonryStructure())
                && PlatformObjectUtils.isNotEmpty(samplingEntity.getBrickWoodStructure()) && PlatformObjectUtils.isNotEmpty(samplingEntity.getSoilStructure())
                && PlatformObjectUtils.isNotEmpty(samplingEntity.getWoodStructure()) && PlatformObjectUtils.isNotEmpty(samplingEntity.getStoneStructure())
                && PlatformObjectUtils.isNotEmpty(samplingEntity.getOtherStructure())){
            BigDecimal d1 = new BigDecimal(samplingEntity.getHighStructure());
            BigDecimal d2 = new BigDecimal(samplingEntity.getSteelStructure());
            BigDecimal d3 = new BigDecimal(samplingEntity.getConcreteStructure());
            BigDecimal d4 = new BigDecimal(samplingEntity.getMasonryStructure());
            BigDecimal d5 = new BigDecimal(samplingEntity.getBrickWoodStructure());
            BigDecimal d6 = new BigDecimal(samplingEntity.getSoilStructure());
            BigDecimal d7 = new BigDecimal(samplingEntity.getWoodStructure());
            BigDecimal d8 = new BigDecimal(samplingEntity.getStoneStructure());
            BigDecimal d9 = new BigDecimal(samplingEntity.getOtherStructure());
            BigDecimal v = d1.add(d2.add(d3.add(d4.add(d5.add(d6.add(d7.add(d8.add(d9))))))));
            BigDecimal v1 = new BigDecimal(100.0);
            int i = v.compareTo(v1);
            if(i!=0){
                result.setSuccess(false);
                message.append("请确保房屋类型比例之和为100！");
            }
        }
        result.setMsg(message.toString());
        return result;
    }

}
